﻿///*
// * Memcached缓存操作
// * 作者：平扬
// * 时间：2014-04-14
// * 版本：1.0.0.0
// * 
// */
//using System;
//using Memcached.ClientLibrary;
//using System.Xml;
//using System.Configuration;
//using System.Web;
//using System.Web.Caching;

//namespace JiuMeiMall.PMethod.CacheHelper
//{
//    public class 
//        CacheOper
//    {
//        private static readonly string CacheDays = ConfigurationManager.AppSettings["CacheDays"] ?? "2";
//        private static readonly string CacheHours = ConfigurationManager.AppSettings["CacheHours"] ?? "1";
//        private static readonly string CacheMinutes = ConfigurationManager.AppSettings["CacheMintes"] ?? "30";

//        #region 缓存服务器列表
//        /// <summary>
//        /// 缓存服务器列表配置文件
//        /// </summary>
//        private static string XmlPath = string.Empty;
//        /// <summary>
//        /// 缓存服务器列表
//        /// </summary>
//        private static string[] MemcachedServerList
//        {
//            get
//            {
//                if (HttpContext.Current.Cache["ServerListXml"] == null)
//                {
//                    XmlDocument xmlDocument = new XmlDocument();
//                    xmlDocument.Load(XmlPath);
//                    XmlNodeList ilist = xmlDocument.SelectNodes("CONFIG/LISTS/LIST");
//                    string[] MemcachedLists = new string[ilist.Count];
//                    for (int i = 0; i < ilist.Count; i++)
//                    {
//                        XmlNode node = ilist[i];
//                        MemcachedLists[i] = node.Attributes["IP"].Value + ":" + node.Attributes["PORT"].Value;
//                    }
//                    HttpRuntime.Cache.Insert("ServerListXml", MemcachedLists, new CacheDependency(XmlPath), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null);
//                }
//                return HttpRuntime.Cache["ServerListXml"] as string[];
//            }
//        } 
//        #endregion

//        static CacheOper()
//        {
//            if (HttpContext.Current != null)
//            {
//                XmlPath = HttpContext.Current.Server.MapPath("~/App_Data/CacheServer.xml");
//            }
//        }

//        /// <summary>
//        /// 创建Memcache服务
//        /// </summary>
//        /// <param name="poolName">Socket连接池名称</param>
//        /// <returns>Memcache客户端代理类</returns>
//        private static MemcachedClient CreateServer(string poolName)
//        {
//            //初始化memcache服务器池
//            SockIOPool pool = SockIOPool.GetInstance(poolName);
//            pool.SetServers(MemcachedServerList);
//            pool.SocketTimeout = 3000;
//            pool.SocketConnectTimeout = 3000;
//            pool.Initialize(); 
//            //创建了一个Memcache客户端的代理类。
//            MemcachedClient mc = new MemcachedClient();
//            mc.PoolName = poolName;
//            mc.EnableCompression = false;//是否压缩 
//            return mc;
//        }

//        /// <summary>
//        /// 向缓存池存入值,数据缓存默认天数
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        /// <param name="Value">缓存内容</param>
//        /// <returns></returns>
//        public static bool setMemcachedValue(string poolName, string key, string Value)
//        {
//            DateTime d1 = DateTime.Now.AddDays(double.Parse(CacheDays));
//            return CacheOper.setMemCacheValues(poolName, key, Value, d1);
//        }
//        /// <summary>
//        /// 向缓存池存入值,数据缓存默认小时数
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        /// <param name="value">缓存内容</param>
//        /// <returns></returns>
//        public static bool setMemcacheValueInHour(string poolName, string key, string value)
//        {
//            DateTime d1 = DateTime.Now.AddHours(double.Parse(CacheHours));
//            return CacheOper.setMemCacheValues(poolName, key, value, d1);
//        }
//        /// <summary>
//        /// 向缓存池存入值,数据缓存默认分钟数
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        /// <param name="value">缓存内容</param>
//        /// <returns></returns>
//        public static bool setMemcacheValueInMinutes(string poolName, string key, string value)
//        {
//            DateTime d1 = DateTime.Now.AddMinutes(double.Parse(CacheMinutes));
//            return CacheOper.setMemCacheValues(poolName, key, value, d1);
//        }
//        /// <summary>
//        /// 向缓存池写入数据,指定失效时间
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        /// <param name="value">缓存内容</param>
//        /// <param name="d1">缓存失效时间</param>
//        /// <returns></returns>
//        private static bool setMemCacheValues(string poolName, string key, string value, DateTime d1)
//        {
//            try
//            {
//                MemcachedClient mc = CreateServer(poolName);
//                return  mc.Set(key, (object)value, d1);
//            }
//            catch { return false; }
//        }

//        /// <summary>
//        /// 获取缓存池中值
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        /// <returns></returns>
//        public static string GetMemCacheValues(string poolName, string key)
//        {
//            try
//            {
//                string str = "";
//                MemcachedClient mc = CreateServer(poolName);
//                if (!mc.KeyExists(key))
//                    return string.Empty;
//                object obj = mc.Get(key);
//                if (obj != null)
//                    str = obj.ToString();
//                return str;
//            }
//            catch { return string.Empty; }
//        }
//        /// <summary>
//        /// 释放缓存池所有数据
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        public static void FlushAllCache(string poolName)
//        {
//            try
//            {
//                CreateServer(poolName).FlushAll();
//            }
//            catch { }
//        }
//        /// <summary>
//        /// 向缓存池存入值,数据缓存指定时间
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        /// <param name="value">缓存内容</param>
//        /// <param name="ExpiredTime">失效时间</param>
//        /// <returns></returns>
//        public static bool SetMemValuesExpiredTime(string poolName, string key, string value, DateTime ExpiredTime)
//        {
//            return CacheOper.setMemCacheValues(poolName, key, value, ExpiredTime);
//        }
//        /// <summary>
//        /// 删除指定缓存池的指定键的值
//        /// </summary>
//        /// <param name="poolName">缓存池名</param>
//        /// <param name="key">缓存键</param>
//        public static void DeleteMemcache(string poolName, string key)
//        {
//            try
//            { 
//                MemcachedClient memcachedClient = CreateServer(poolName);
//                if (!memcachedClient.KeyExists(key))
//                    return;
//                memcachedClient.Delete(key);
//            }
//            catch { }
//        }
//    }
//}
